package com.zmn.oms.dubbo.interfaces.normal.master;

import com.zmn.common.dto2.ResponseDTO;
import com.zmn.oms.common.dio.OmsAppBaseDIO;
import com.zmn.oms.common.dio.normal.master.CancelConfirmDIO;
import com.zmn.oms.common.dio.normal.master.GrabOrderDIO;
import com.zmn.oms.common.dio.normal.master.ReworkRefundDIO;
import com.zmn.oms.common.dio.normal.master.UpdateAddressDIO;
import com.zmn.oms.dubbo.dto.common.work.ContactUserDIO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;

import javax.validation.constraints.NotNull;

/**
 * 类描述：
 *
 * @author wangxiaokun
 * @since 2021/07/15 16:12
 */
@Api(
        value = "工程师操作工单",
        tags = {"工程师操作工单"}
)
public interface MasterOrderWorkModifyRemoteService {

    /**
     * 工程师抢单
     *
     * @param grabOrderDIO
     * @return
     */
    @ApiOperation(
            value = "工程师抢单",
            response = ResponseDTO.class,
            tags = {"工程师操作工单"}
    )
    ResponseDTO<Boolean> grabOrderWork(@NotNull(message = "入参不能为空") GrabOrderDIO grabOrderDIO);

    /**
     * 工程师抢单
     *
     * @param grabOrderDIO
     * @return
     */
    @ApiOperation(
            value = "工程师无网格抢单",
            response = ResponseDTO.class,
            tags = {"工程师操作工单"}
    )
    ResponseDTO<Boolean> nonGridGrabOrderWork(@NotNull(message = "入参不能为空") GrabOrderDIO grabOrderDIO);

    /**
     * 工程师审核订单取消
     *
     * @param cancelConfirmDIO
     * @return
     */
    @ApiOperation(
            value = "工程师审核订单取消",
            response = ResponseDTO.class,
            tags = {"工程师操作工单"}
    )
    ResponseDTO<Boolean> reviewOrderCancel(@NotNull(message = "入参不能为空") CancelConfirmDIO cancelConfirmDIO);

    @ApiOperation(
            value = "完成前检查",
            response = ResponseDTO.class,
            tags = {"工程师操作工单"}
    )
    ResponseDTO checkComplete(@NotNull(message = "入参不能为空") OmsAppBaseDIO omsAppBaseDIO);

    /**
     * 工程师电话解决完成工单
     */
    @ApiOperation(
            value = "工程师电话解决完成工单",
            response = ResponseDTO.class,
            tags = {"工程师操作工单"}
    )
    ResponseDTO<Boolean> telephoneSolutionCompleteOrder(@NotNull(message = "入参不能为空") ContactUserDIO contactUserDIO);

    /**
     * 工程师再次联系
     */
    @ApiOperation(
            value = "工程师再次联系",
            response = ResponseDTO.class,
            tags = {"工程师操作工单"}
    )
    ResponseDTO<Boolean> contactUserAgain(@NotNull(message = "入参不能为空") ContactUserDIO contactUserDIO);

    @ApiOperation(value = "工程师修改地址", response = ResponseDTO.class, tags = {"工程师操作工单"})
    ResponseDTO modifyOrderWorkAddress(UpdateAddressDIO updateAddressDIO);

    /**
     * 工程师返修单建退款单
     */
    @ApiOperation(
            value = "工程师返修单建退款单",
            response = ResponseDTO.class,
            tags = {"工程师操作工单"}
    )
    ResponseDTO addRefundOrder(@NotNull(message = "入参不能为空") ReworkRefundDIO reworkRefundDIO);

    /**
     * 工程师返修单建返修新单
     */
    @ApiOperation(
            value = "工程师返修单建返修新单",
            response = ResponseDTO.class,
            tags = {"工程师操作工单"}
    )
    ResponseDTO<Long> addReworkNewOrder(@NotNull(message = "入参不能为空") OmsAppBaseDIO omsAppBaseDIO);


}
